/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.ufpb.halloc.negocio;

import br.com.ufpb.halloc.dados.ProfessorDAOArquivoBin;
import br.com.ufpb.halloc.dados.ProfessorDAOArquivoFactory;
import br.com.ufpb.halloc.dados.ProfessorDAOBDFactory;
import br.com.ufpb.halloc.dados.ProfessorDAOFactory;
import br.com.ufpb.halloc.dados.ProfessorDAOPostgres;
import java.util.List;

/**
 *
 * @author Filipe
 */
public class GerenteDeCadastroProfessor {
    
    ProfessorDAOFactory professorFact;
    //ProfessorDAOArquivoBin dao;
    ProfessorDAOPostgres dao;
    
    private static GerenteDeCadastroProfessor gerente;
          
    public static GerenteDeCadastroProfessor getInstance(){
        if (gerente == null)
            return new GerenteDeCadastroProfessor();
        return gerente;
    }
    
    private GerenteDeCadastroProfessor(){
        //professorFact = ProfessorDAOFactory.getProfessorDAOFactory(ProfessorDAOFactory.FILE);
        //dao = (ProfessorDAOArquivoBin) professorFact.getProfessorDAO(ProfessorDAOArquivoFactory.BIN);
        professorFact = ProfessorDAOFactory.getProfessorDAOFactory(ProfessorDAOFactory.BD);
        dao = (ProfessorDAOPostgres) professorFact.getProfessorDAO(ProfessorDAOBDFactory.PGSQL);
    }
    
    public void gravar(Professor p){
        dao.salvar(p);
    }
    
    public Professor buscarMat(String mat){
        return dao.getProfessorMatricula(mat);
    }
    
    public Professor buscar(Professor p){
        return dao.getProfessor(p);
    }
    
    public List<Professor> buscarTodos(){
        return dao.getProfessores();
    }
    
    public List<Professor> buscarTodosComProjeto(){
        return dao.buscarTodosComProjeto();
    }
    
    public void atualizar(Professor p){
        dao.atualizar(p);
    }
    
    public void apagar(Professor p){
        dao.remover(p);
    }
    
    public void apagarMatricula(String matricula){
        dao.removerPorMatricula(matricula);
    } 
    
    public void inserirPreferencia (String codDisc, String codProf){
        dao.inserirPreferencia(codDisc, codProf);
    }
    public List<Disciplina> getDisciplinasDePreferencia(String cod){
        return dao.getDisciplinasDePreferencia(cod);
    }
    
    public void alocarDisciplinaAProfessor(String pro, String tur){
        dao.alocarDisciplia(pro, tur);
    }
    
    public void desalocarDisciplinaAProfessor( String pro, String tur){
        dao.desalocarDisciplia(pro, tur);
    }
    
    public List<Turma> turmasPreferidas(String codProf){
        return dao.turmasPreferidas(codProf);
    }
    
    public List<Turma> turmasAlocadasProfessor(String mat){
        return dao.turmasAlocadasProfessor(mat);
    }
    
    public int numeroDeDisciplinas(String mat){
        return dao.numeroDeDisciplinas(mat);
    }
}
